package Servlets;

import Beans.HorarioDoUsuario;
import Beans.Jogador;
import Beans.Jogo;
import Beans.Usuario;
import Daos.HorarioDoUsuarioDao;
import Daos.JogadorDao;
import Daos.JogoDao;
import Daos.UsuarioDao;
import codigoGeral.Calendario;
import codigoGeral.JogosPendentesDados;
import codigoGeral.ListaJogos;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletLogin extends HttpServlet {

    public void erroLogin( HttpServletRequest request  , HttpServletResponse response) throws IOException{
         HttpSession sessão = request.getSession(true);
        sessão.setAttribute("erroLogin", "Usuario ou senha estao incorretos!");
        response.sendRedirect("index.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //primeira coisa a fazer:matar a sessao, para nao haver conflitos

        HttpSession session = request.getSession(false);
        session.removeAttribute("usuario");
        session.removeAttribute("erroLogin");

        try {
            String login = request.getParameter("login");
            String senha = request.getParameter("password");

            if (login == null || senha == null) {
                erroLogin(request, response);
            }
            //pega usuario do banco
            List<Usuario> usuario = new UsuarioDao().getPorString("login=" + login);

            //pega usuario de nivel 0
            Usuario usuarioCapturado = usuario.get(0);

            if (usuarioCapturado.getSenha().equals(senha) && usuarioCapturado.getLogin().equals(login)) {
                System.out.println("Usuario e senhas estao corretos.");

                HttpSession sessão = request.getSession(true);
                sessão.setAttribute("usuario", usuarioCapturado);
                //pega horarioDosUsuarios

                //pega horarioDosUsuarios
                List<HorarioDoUsuario> horarioDoUsuarios = new ArrayList<HorarioDoUsuario>();
                horarioDoUsuarios = new HorarioDoUsuarioDao().get(usuarioCapturado);
                sessão.setAttribute("horariosLivres", horarioDoUsuarios);

                //pega jogos marcados pelo usuario
                List<Jogo> capturaJogosMarcados = new ArrayList<Jogo>();
                capturaJogosMarcados = new JogoDao().getPorUsuario(usuarioCapturado);
                List<ListaJogos> jogosMarcados = new ArrayList<ListaJogos>();
                for (int i = 0; i < capturaJogosMarcados.size(); i++) {
                    ListaJogos listaJogos = new ListaJogos(capturaJogosMarcados.get(i).getId(),
                            capturaJogosMarcados.get(i).getDataJogo(),
                            capturaJogosMarcados.get(i).getHorario().getHorarioChegada());

                    jogosMarcados.add(listaJogos);
                }

                //pega a lista de todos os jogos



//               for (int i = 0; i < jogosMarcados.size(); i++) {
//                   System.out.println("numero jogo "+jogosMarcados.get(i).getNomeJogo());
//                   System.out.println("horario "+jogosMarcados.get(i).getHorario());
//                   System.out.println("data jogo "+jogosMarcados.get(i).getDataJogo());
//                   System.out.println("================================================");
//               }





                sessão.setAttribute("jogosMarcados", jogosMarcados);



                //pega jogos em que estou participando
                List<Jogador> capturaJogosQueParticipo = new ArrayList<Jogador>();
                capturaJogosQueParticipo = new JogadorDao().getPorUsuario(usuarioCapturado);

                //cria lista para mostrar jogos pendentes
                List<JogosPendentesDados> jogosQueParticipo = new ArrayList<JogosPendentesDados>();
                Calendario calendario = new Calendario(null);

                for (int i = 0; i < capturaJogosQueParticipo.size(); i++) {

                    JogosPendentesDados jogosPendentesDados =
                            new JogosPendentesDados(capturaJogosQueParticipo.get(i).getJogo().getDataJogo(),
                            capturaJogosQueParticipo.get(i).getJogo().getHorario().getHorarioChegada(),
                            capturaJogosQueParticipo.get(i).getJogo().getId(),
                            capturaJogosQueParticipo.get(i).getConfirmacao().toString(),
                            capturaJogosQueParticipo.get(i).getJogo().getUsuario().getNome());

                    String dataAVerificar = capturaJogosQueParticipo.get(i).getJogo().getDataJogo();
                    //   System.out.println("DAta a verificar " + dataAVerificar);
                    if (calendario.comparaDataComAtual(dataAVerificar)) {
                        jogosQueParticipo.add(jogosPendentesDados);
                        System.out.println("Adicionado o jogo pendente");
                    }

                }
//                for (int i = 0; i < jogosQueParticipo.size(); i++) {
//                    System.out.println("Data :" + jogosQueParticipo.get(i).getData());
//                    System.out.println("Confirmação :" + jogosQueParticipo.get(i).getConfirmação());
//                    System.out.println("Horario :" + jogosQueParticipo.get(i).getHorario());
//                    System.out.println("Nome :" + jogosQueParticipo.get(i).getNomeJogo());
//                    System.out.println("Nome do cara que marcou o jogo: " + jogosQueParticipo.get(i).getUsuarioQueMarcouJogo());
//                    System.out.println("================================================");
//                }

//                 for (int i = 0; i < capturaJogosQueParticipo.size(); i++) {
//
//                     System.out.println("jogo "+capturaJogosQueParticipo.get(i).getJogo().getId());
//                     System.out.println("Data jogo "+capturaJogosQueParticipo.get(i).getJogo().getDataJogo());
//                     System.out.println("Horario jogo "+capturaJogosQueParticipo.get(i).getJogo().getHorario().getHorarioChegada());
//
//                     System.out.println("confirmação: "+capturaJogosQueParticipo.get(i).getConfirmacao().toString());
//                     System.out.println("usuario"+capturaJogosQueParticipo.get(i).getUsuario().getId());
//                     System.out.println("================================================");
//
//                 }

                List<Jogador> proximosJogos = new ArrayList<Jogador>();
                proximosJogos = new JogadorDao().get();

                List<JogosPendentesDados> os10jogos = new ArrayList<JogosPendentesDados>();

                for (int i = 0; i < proximosJogos.size(); i++) {
                    JogosPendentesDados jogosPendentesDados =
                            new JogosPendentesDados(proximosJogos.get(i).getJogo().getDataJogo(),
                            proximosJogos.get(i).getJogo().getHorario().getHorarioChegada(),
                            proximosJogos.get(i).getJogo().getId(),
                            proximosJogos.get(i).getConfirmacao().toString(),
                            proximosJogos.get(i).getJogo().getUsuario().getNome());
                    os10jogos.add(jogosPendentesDados);

                }
                sessão.setAttribute("proximosJogos", proximosJogos);

                sessão.setAttribute("jogosQueParticipo", jogosQueParticipo);






                //  request.setAttribute("id", "William");//envia id de usuario para rede
                response.sendRedirect("welcome.jsp");

            } else {
                erroLogin(request, response);
                // request.setAttribute("erroLogin", "Usuario ou senha estao incorretos");
                // response.sendRedirect("index.jsp");
            }
        } catch (Exception erro) {
            System.out.println(erro);
            erroLogin(request, response);
            //  request.setAttribute("erroLogin", "Usuario ou senha estao incorretos");
            //   RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
            //   rd.forward(request, response);
        }
    }
}
